home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Freeware / Miro 1.0 / Miro_Installer.exe / xulrunner / python / test / playlisttest.py < prev    next >
Encoding:
Python Source  |  2007-11-12  |  9.5 KB  |  222 lines

  1. from feed import Feed
  2. from feedparser import FeedParserDict
  3. from item import Item
  4. from playlist import SavedPlaylist
  5. from folder import PlaylistFolder
  6. import app
  7. import views
  8. import tabs
  9. from test.framework import EventLoopTest
  10.  
  11. class PlaylistTestBase(EventLoopTest):
  12.     def setUp(self):
  13.         EventLoopTest.setUp(self)
  14.         self.feed = Feed(u"http://feed.uk")
  15.         self.i1 = Item(FeedParserDict({'title': u'item1'}),
  16.                        feed_id=self.feed.id)
  17.         self.i2 = Item(FeedParserDict({'title': u'item2'}),
  18.                        feed_id=self.feed.id)
  19.         self.i3 = Item(FeedParserDict({'title': u'item3'}),
  20.                        feed_id=self.feed.id)
  21.         self.i4 = Item(FeedParserDict({'title': u'item4'}),
  22.                        feed_id=self.feed.id)
  23.  
  24.     def checkList(self, playlist, correctOrder):
  25.         realPositions = {}
  26.         i = 0
  27.         for listid, item in zip(playlist.trackedItems.list, correctOrder):
  28.             self.assertEquals(listid, item.getID())
  29.             realPositions[item.getID()] = i
  30.             i += 1
  31.         self.assertEquals(set(playlist.trackedItems.list), 
  32.                 playlist.trackedItems.trackedIDs)
  33.         self.assertEquals(realPositions, playlist.trackedItems.positions)
  34.         self.assertEquals(playlist.getItems(), correctOrder)
  35.  
  36.     def doAppend(self, playlist, objects):
  37.         playlist.handleDNDAppend(set([i.getID() for i in objects]))
  38.  
  39.     def doReorder(self, playlist, anchor, objects):
  40.         playlist.handleDNDReorder(anchor, set([i.getID() for i in objects]))
  41.  
  42. class PlaylistTestCase(PlaylistTestBase):
  43.     def setUp(self):
  44.         PlaylistTestBase.setUp(self)
  45.         self.addCallbacks = []
  46.         self.removeCallbacks = []
  47.  
  48.     def addCallback(self, obj, id):
  49.         self.addCallbacks.append((obj, id))
  50.  
  51.     def removeCallback(self, obj, id):
  52.         self.removeCallbacks.append((obj, id))
  53.  
  54.     def testBasicOperations(self):
  55.         playlist = SavedPlaylist("rocketboom")
  56.         self.assertEquals(playlist.getTitle(), 'rocketboom')
  57.         self.assertEquals(playlist.getItems(), [])
  58.         playlist.addItem(self.i4)
  59.         playlist.addItem(self.i1)
  60.         playlist.addItem(self.i3)
  61.         playlist.addItem(self.i2)
  62.         self.checkList(playlist, [self.i4, self.i1, self.i3, self.i2])
  63.         playlist.addItem(self.i2)
  64.         self.checkList(playlist, [self.i4, self.i1, self.i3, self.i2])
  65.         self.assert_(self.i1.keep)
  66.         self.assert_(self.i2.keep)
  67.         self.assert_(self.i3.keep)
  68.         self.assert_(self.i4.keep)
  69.         playlist.moveItem(self.i2, 1)
  70.         self.checkList(playlist, [self.i4, self.i2, self.i1, self.i3])
  71.         playlist.moveItem(self.i3, 0)
  72.         self.checkList(playlist, [self.i3, self.i4, self.i2, self.i1])
  73.         playlist.moveItem(self.i3, 3)
  74.         self.checkList(playlist, [self.i4, self.i2, self.i1, self.i3])
  75.         playlist.removeItem(self.i2)
  76.         self.checkList(playlist, [self.i4, self.i1, self.i3])
  77.         playlist.removeItem(self.i3)
  78.         self.checkList(playlist, [self.i4, self.i1])
  79.  
  80.     def testInitialList(self):
  81.         initialList = [self.i1, self.i2, self.i3]
  82.         playlist = SavedPlaylist("rocketboom", initialList)
  83.         self.assertEquals(playlist.getTitle(), 'rocketboom')
  84.         self.checkList(playlist, initialList)
  85.  
  86.     def checkCallbacks(self, movedItems):
  87.         correctCallbackList = [(i, i.getID()) for i in movedItems]
  88.         self.assertEquals(self.addCallbacks, correctCallbackList)
  89.         self.assertEquals(self.removeCallbacks, correctCallbackList)
  90.  
  91.     def testCallbacks(self):
  92.         initialList = [self.i1, self.i2, self.i3]
  93.         playlist = SavedPlaylist("rocketboom", initialList)
  94.         playlist.getView().addAddCallback(self.addCallback)
  95.         playlist.getView().addRemoveCallback(self.removeCallback)
  96.         playlist.moveItem(self.i2, 0)
  97.         self.checkCallbacks([self.i2])
  98.         playlist.moveItem(self.i3, 0)
  99.         self.checkCallbacks([self.i2, self.i3])
  100.  
  101.     def testHandleDrop(self):
  102.         playlist = SavedPlaylist("rocketboom")
  103.         self.doAppend(playlist, [self.i1])
  104.         self.checkList(playlist, [self.i1])
  105.         self.doAppend(playlist, [self.i3])
  106.         self.checkList(playlist, [self.i1, self.i3])
  107.         self.doAppend(playlist, [self.i3, self.i4])
  108.         self.checkList(playlist, [self.i1, self.i3, self.i4])
  109.  
  110.     def testMoveSelectionAboveItem(self):
  111.         playlist = SavedPlaylist("rocketboom", [self.i1, self.i2, self.i3,
  112.                 self.i4])
  113.         view = playlist.getView()
  114.         self.doReorder(playlist, self.i3, [self.i1])
  115.         self.checkList(playlist, [self.i2, self.i1, self.i3, self.i4])
  116.         self.doReorder(playlist, None, [self.i1])
  117.         self.checkList(playlist, [self.i2, self.i3, self.i4, self.i1])
  118.         self.doReorder(playlist, self.i2, [self.i1])
  119.         self.checkList(playlist, [self.i1, self.i2, self.i3, self.i4])
  120.         self.doReorder(playlist, self.i1, [self.i2, self.i3, self.i4])
  121.         self.checkList(playlist, [self.i2, self.i3, self.i4, self.i1])
  122.         self.doReorder(playlist, self.i4, [self.i2, self.i1])
  123.         self.checkList(playlist, [self.i3, self.i2, self.i1, self.i4])
  124.         self.doReorder(playlist, None, [self.i1, self.i3])
  125.         self.checkList(playlist, [self.i2, self.i4, self.i3, self.i1])
  126.         self.doReorder(playlist, None, [self.i2, self.i3, self.i4])
  127.         self.checkList(playlist, [self.i1, self.i2, self.i4, self.i3])
  128.  
  129.     def testExpireRemovesItem(self):
  130.         checkList = [self.i1, self.i2, self.i3, self.i4]
  131.         playlist = SavedPlaylist("rocketboom", checkList)
  132.         for i in [self.i1, self.i3, self.i4, self.i2]:
  133.             i.expire()
  134.             checkList.remove(i)
  135.             self.checkList(playlist, checkList)
  136.  
  137. class PlaylistFolderTestCase(PlaylistTestBase):
  138.     def setUp(self):
  139.         PlaylistTestBase.setUp(self)
  140.         self.playlistTabOrder = tabs.TabOrder(u'playlist')
  141.         self.p1 = SavedPlaylist("rocketboom", [self.i1, self.i3])
  142.         self.p2 = SavedPlaylist("telemusicvision", [self.i4, self.i3])
  143.         self.p3 = SavedPlaylist("digg", [self.i1, self.i2, self.i3, self.i4])
  144.         self.folder = PlaylistFolder("My Best Vids")
  145.         self.folder.setExpanded(True)
  146.         self.runPendingIdles() # The TabOrder gets updated in an idle call
  147.  
  148.     def doTabReorder(self, anchorID, items):
  149.         self.playlistTabOrder.handleDNDReorder(anchorID, 
  150.                 set([i.getID() for i in items]))
  151.  
  152.     def doPlaylistRemove(self, playlist, items):
  153.         playlist.handleRemove(set([i.getID() for i in items]))
  154.  
  155.     def testHandleDrop(self):
  156.         self.doAppend(self.folder, [self.p1])
  157.         self.checkList(self.folder, [self.i1, self.i3])
  158.         self.doAppend(self.folder, [self.p2])
  159.         self.checkList(self.folder, [self.i1, self.i3, self.i4])
  160.         self.doAppend(self.folder, [self.p1, self.p2, self.p3])
  161.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  162.  
  163.     def testHandleDropUnexpanded(self):
  164.         self.folder.setExpanded(False)
  165.         selection = app.controller.selection
  166.         selection.selectItem('tablist', self.playlistTabOrder.getView(), 
  167.                 self.p1.getID(), shiftSelect=False, controlSelect=False)
  168.         self.doAppend(self.folder, [self.p1])
  169.         app.controller.selection.tabListSelection
  170.         selectedTabIDs = selection.tabListSelection.currentSelection
  171.         self.assertEquals(selectedTabIDs, set([self.folder.getID()]))
  172.  
  173.     def testExpireRemovesItem(self):
  174.         self.doAppend(self.folder, [self.p1])
  175.         self.checkList(self.folder, [self.i1, self.i3])
  176.         self.i1.expire()
  177.         self.checkList(self.folder, [self.i3])
  178.         self.i3.expire()
  179.         self.checkList(self.folder, [])
  180.  
  181.     def testRemovePlaylistRemovesItem(self):
  182.         for pl in [self.p1, self.p2, self.p3]:
  183.             self.doAppend(self.folder, [pl])
  184.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  185.         self.doTabReorder(None, [self.p3])
  186.         self.checkList(self.folder, [self.i1, self.i3, self.i4])
  187.         self.doTabReorder(None, [self.p2])
  188.         self.checkList(self.folder, [self.i1, self.i3])
  189.         self.doTabReorder(None, [self.p1])
  190.         self.checkList(self.folder, [])
  191.  
  192.     def testReorder(self):
  193.         for pl in [self.p1, self.p2, self.p3]:
  194.             self.doAppend(self.folder, [pl])
  195.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  196.         # reordering the playlist doesn't change the folder
  197.         self.doReorder(self.p1, None, [self.i1])
  198.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  199.         # reordering the folder doesn't change the playlists
  200.         self.doReorder(self.folder, None, [self.i2])
  201.         self.checkList(self.p1, [self.i3, self.i1])
  202.         self.checkList(self.p2, [self.i4, self.i3])
  203.         self.checkList(self.p3, [self.i1, self.i2, self.i3, self.i4])
  204.  
  205.         self.p1 = SavedPlaylist("rocketboom", [self.i1, self.i3])
  206.         self.p2 = SavedPlaylist("telemusicvision", [self.i4, self.i3])
  207.         self.p3 = SavedPlaylist("digg", [self.i1, self.i2, self.i3, self.i4])
  208.  
  209.     def testRemoveItemFromPlaylist(self):
  210.         for pl in [self.p1, self.p2, self.p3]:
  211.             self.doAppend(self.folder, [pl])
  212.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  213.         self.doPlaylistRemove(self.p1, [self.i1])
  214.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  215.         self.doPlaylistRemove(self.p3, [self.i1])
  216.         self.checkList(self.folder, [self.i3, self.i4, self.i2])
  217.  
  218.     def testRemoveFolderRemovesPlaylist(self):
  219.         self.doAppend(self.folder, [self.p1, self.p2, self.p3])
  220.         self.folder.remove()
  221.         self.assertEquals(len(views.playlists), 0)
  222.